package com.gitee.feizns.dynamic.math;

import java.util.Arrays;
import java.util.stream.DoubleStream;

/**
 * 数学操作工具类
 * @author feizns
 * @since 2023/2/25
 */
public abstract class Maths {

    /**
     * 数据集合中的中位数
     * @param doubleStreams 数字列表
     * @return 中位数
     */
    public static double median(DoubleStream doubleStreams) {
        return median(doubleStreams.sorted().toArray());
    }

    /**
     * 数据集合中的中位数
     * @param numbers 数字列表
     * @return 中位数
     */
    public static double median(double... numbers) {
        int length = numbers.length;
        int index = length / 2;
        return length % 2 == 1 ? numbers[index] : avg(numbers[index - 1], numbers[index]);
    }

    /**
     * 求平均数
     * @param numbers 数值列表
     * @return 平均数
     */
    public static double avg(double... numbers) {
        return sum(numbers) / numbers.length;
    }

    /**
     * 求和
     * @param numbers 数字列表
     * @return 和
     */
    public static double sum(double... numbers) {
        return Arrays.stream(numbers).sum();
    }

}
